<?php

/**
 * Возвращает иерархию наследований классов для данного класса/объекта.
 * Можно указать самый старший класс, выше которого иерархия не интересует.
 *
 * @param string/object $obj Исследуемый класс (в виде строки с именем) или объект.
 * @param [optional]string $top Строка с именем класса предков которого возвращать не нужно.
 * @return array Массив имён классов в иерархии от потомка к предку.
 */
function get_classes($obj, $top=null)
{
    $result = array();
    $class = null;
    if (is_object($obj)) {
        $class = get_class($obj);
    } elseif (is_string($obj)) {
        if (class_exists($obj)) {
            $class = $obj;
        }
    }
    if (isset($class)) {
        $result[] = $class;
        if (!is_null($top) && ($class === $top)) {
            return $result;
        }
        while ($parent = get_parent_class($class)) {
            $result[] = $class = $parent;
            if (!is_null($top) && ($class === $top)) {
                break;
            }
        }
    }

    return $result;
}

class SystemTaskRecord
{
    private $_id;
    private $_system_task_id;
    private $_start_date;
    private $_finish_date;
    private $_status;
    private $_message;
    private $_thread;
    private $_parameters;

    function __construct($system_task_id, $parameters = null, $thread = 1)
    {
        $args = func_get_args();
        $call_method = null;
        $call_stack = debug_backtrace();

        if (
            ($caller = isset($call_stack[1]) ? $call_stack[1] : null)
            && (! empty($caller['class']) && class_exists($caller['class']))
            && (end(get_classes($className, __CLASS__)) === __CLASS__))
        {
            if (! empty($caller['function']) && (! empty($caller['type']) && ($caller['type'] === "::"))) {
                $call_method = $caller['function'];
            }
        }
        switch ($call_method) {

        case 'Create':
            break;

        case 'Restore':
            break;

        default:
            $system_task_id = @$args[0];
            $parameters     = @$args[1];
            $thread         = @$args[2];

            $this->_thread = $thread;
            $this->_system_task_id = $system_task_id;
            if (! is_null($parameters)) {
                $this->_parameters = $parameters;
                $this->_status = 'PREPARED';
            } else {
                $this->_status = 'STARTED';
            }
            $this->_start_date = time();
        }
    }

    static function Create()
    {

    }

    static function Store($id)
    {

    }

    static function Restore($id)
    {

    }

    function getId()
    {
        return $this->_id;
    }

    function getSystemTaskId()
    {
        return $this->_system_task_id;
    }

    function getStartDate()
    {
        return $this->_start_date;
    }

    function getFinishDate()
    {
        return $this->_finish_date;
    }

    function getStatus()
    {
        return $this->_status;
    }

    function getMessage()
    {
        return $this->_message;
    }

    function getThread()
    {
        return $this->_thread;
    }

    function getParameters()
    {
        return $this->_parameters;
    }
}

?>